package com.note.app.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 日志记录注解
 * 用于标记需要进行接口访问日志记录的方法
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LogRecord {
    
    /**
     * 接口名称/描述
     */
    String description() default "";
    
    /**
     * 模块名称
     */
    String module() default "";
    
    /**
     * 是否记录请求参数
     */
    boolean recordRequestParams() default true;
    
    /**
     * 是否记录响应结果
     */
    boolean recordResponseData() default true;
    
    /**
     * 是否记录用户信息
     * 当设置为true时，会尝试从UserContext中获取当前用户信息
     */
    boolean recordUserInfo() default true;
    
    /**
     * 是否记录异常信息
     */
    boolean recordException() default true;
    
    /**
     * 操作类型
     */
    OperationType operationType() default OperationType.OTHER;
    
    /**
     * 操作类型枚举
     */
    enum OperationType {
        /**
         * 查询操作
         */
        QUERY,
        
        /**
         * 创建操作
         */
        CREATE,
        
        /**
         * 修改操作
         */
        UPDATE,
        
        /**
         * 删除操作
         */
        DELETE,
        
        /**
         * 导出操作
         */
        EXPORT,
        
        /**
         * 导入操作
         */
        IMPORT,
        
        /**
         * 登录操作
         */
        LOGIN,
        
        /**
         * 登出操作
         */
        LOGOUT,
        
        /**
         * 其他操作
         */
        OTHER
    }
} 